From 6da7238c37487a41f1c9e15716c2886e6ec8c973 Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Thu, 15 Sep 2016 18:22:36 -0700 Subject: [PATCH] Make remote content skin tabs non-File specific This is one of the steps for implementing shadow namespaces - generalizing foreign file specific code to be usable for any namespace. This allows us to no-longer special case WikiFilePage in SkinTemplate when building content_navigation, and will let GlobalUserPage to add similar tabs just by overriding the same functions. The new WikiPage::getWikiDisplayName() and WikiPage::getSourceURL() functions will return expected values for both local and remote content. Change-Id: Ib3d7dcbefe95da351872e63f306799eef83e00a7 --- includes/page/WikiFilePage.php | 16 ++++++++++++++++ includes/page/WikiPage.php | 26 ++++++++++++++++++++++++++ includes/skins/SkinTemplate.php | 17 ++++++++--------- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/includes/page/WikiFilePage.php b/includes/page/WikiFilePage.php index 74566cba35..1fa4bfa981 100644 --- a/includes/page/WikiFilePage.php +++ b/includes/page/WikiFilePage.php @@ -224,4 +224,20 @@ class WikiFilePage extends WikiPage { return TitleArray::newFromResult( $res ); } + + /** + * @since 1.28 + * @return string + */ + public function getWikiDisplayName() { + return $this->getFile()->getRepo()->getDisplayName(); + } + + /** + * @since 1.28 + * @return string + */ + public function getSourceURL() { + return $this->getFile()->getDescriptionUrl(); + } } diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 284a343057..924a395d7b 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -3727,4 +3727,30 @@ class WikiPage implements Page, IDBAccessObject { public function isLocal() { return true; } + + /** + * The display name for the site this content + * come from. If a subclass overrides isLocal(), + * this could return something other than the + * current site name + * + * @since 1.28 + * @return string + */ + public function getWikiDisplayName() { + global $wgSitename; + return $wgSitename; + } + + /** + * Get the source URL for the content on this page, + * typically the canonical URL, but may be a remote + * link if the content comes from another site + * + * @since 1.28 + * @return string + */ + public function getSourceURL() { + return $this->getTitle()->getCanonicalURL(); + } } diff --git a/includes/skins/SkinTemplate.php b/includes/skins/SkinTemplate.php index e6763cab47..69f2e496fe 100644 --- a/includes/skins/SkinTemplate.php +++ b/includes/skins/SkinTemplate.php @@ -919,19 +919,18 @@ class SkinTemplate extends Skin { $content_navigation['views']['view']['redundant'] = true; } - $isForeignFile = $title->inNamespace( NS_FILE ) && $this->canUseWikiPage() && - $this->getWikiPage() instanceof WikiFilePage && !$this->getWikiPage()->isLocal(); + $page = $this->canUseWikiPage() ? $this->getWikiPage() : false; + $isRemoteContent = $page && !$page->isLocal(); // If it is a non-local file, show a link to the file in its own repository // @todo abstract this for remote content that isn't a file - if ( $isForeignFile ) { - $file = $this->getWikiPage()->getFile(); + if ( $isRemoteContent ) { $content_navigation['views']['view-foreign'] = [ 'class' => '', 'text' => wfMessageFallback( "$skname-view-foreign", 'view-foreign' )-> setContext( $this->getContext() )-> - params( $file->getRepo()->getDisplayName() )->text(), - 'href' => $file->getDescriptionUrl(), + params( $page->getWikiDisplayName() )->text(), + 'href' => $page->getSourceURL(), 'primary' => false, ]; } @@ -955,9 +954,9 @@ class SkinTemplate extends Skin { && $title->getDefaultMessageText() !== false ) ) { - $msgKey = $isForeignFile ? 'edit-local' : 'edit'; + $msgKey = $isRemoteContent ? 'edit-local' : 'edit'; } else { - $msgKey = $isForeignFile ? 'create-local' : 'create'; + $msgKey = $isRemoteContent ? 'create-local' : 'create'; } $content_navigation['views']['edit'] = [ 'class' => ( $isEditing && ( $section !== 'new' || !$showNewSection ) @@ -967,7 +966,7 @@ class SkinTemplate extends Skin { 'text' => wfMessageFallback( "$skname-view-$msgKey", $msgKey ) ->setContext( $this->getContext() )->text(), 'href' => $title->getLocalURL( $this->editUrlOptions() ), - 'primary' => !$isForeignFile, // don't collapse this in vector + 'primary' => !$isRemoteContent, // don't collapse this in vector ]; // section link -- 2.20.1